import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '@/store'
import nprogress from 'nprogress'
Vue.use(VueRouter)

// 引入多个模块的路由规则
import approvalsRouter from './modules/approvals'
import attendancesRouter from './modules/attendances'
import departmentsRouter from './modules/departments'
import employeesRouter from './modules/employees'
import permissionRouter from './modules/permission'
import salarysRouter from './modules/salarys'
import settingRouter from './modules/setting'
import socialRouter from './modules/social'

// 动态路由 
export const asyncRoutes = [
    approvalsRouter,
    attendancesRouter,
    departmentsRouter,
    employeesRouter,
    permissionRouter,
    salarysRouter,
    settingRouter,
    socialRouter
  ]


// 静态路由
export const routes=[
    {
        path:'/',
        redirect:'/dashBoard',
        name:"Layout",
        component:()=>import('../Layout'),
        meta:{title:'首页',icon:"icon-shouye"},
        children:[
            {
                path:'/dashBoard',
                component:()=>import('@/views/dashBoard'),
                // 路由的原信息 其实就是存储数据的对象 我们可以在这里防止一些信息
                // meta属性的里面的属性 随意定义 title对应侧边栏的内容
            },

        ]
    },
    {
        path:'/login',
        name:"login",
        component:()=>import('../views/login'),
        hidden:true //添加该属性 做菜边栏不显示
    },
    {
        path:'/404',
        component:()=>import('../views/NotFound.vue'),
        hidden:true
    },
    {
        path:'*',
        component:()=>import('../views/NotFound.vue')
    },

]
const router = new VueRouter({
    routes:[...routes,...asyncRoutes]
})
//定义白名单 不受权限控制的页面 
const whiteList=['/404','/login']

// 前置
router.beforeEach(async(to,from,next)=>{
    nprogress.start()
    // 首先判断是否有token
    if(store.getters.token){
        //有token 判断是否是登录页
        if(to.path==='/login'){
            // 实现免登录
            next('/dashBoard')
        }else{
            // 不是去往登录页
            // 判断没有getters的用户信息
            if(!store.getters.userId){
                // 没有这个id 才会调用vuex获取用户资料的action
              await store.dispatch('my_user/getuserInfo')
                // 为什么要写await 因为我们想要获取玩资料再去放行

            }
            // 直接放行
            next() 
        }
    }else{
        // 没有token
        if(whiteList.indexOf(to.path)>-1){
            // 找到了  表示在白名单里  直接放行
            next()
            // 不是在白名单里
        }else{
            // 去往login页面
            next('/login')
        }
    }
})
// 后置
router.afterEach(()=>{
    nprogress.done()
})
export default router